<?php
/**
 * 通用文件浏览器功能
 * 包含文件类型统计和 Markdown 预览功能
 */

// 定义根目录常量
define('ROOT', dirname(__FILE__));

// 引入 Markdown 预览器
require_once 'MarkdownPreviewer.php';

// 检查是否是 Markdown 文件预览请求
if (isset($_GET['preview']) && $_GET['preview'] === 'md') {
    $file = isset($_GET['file']) ? $_GET['file'] : '';
    if ($file && MarkdownPreviewer::isMarkdownFile($file)) {
        // 使用当前目录或根目录
        $currentDir = isset($GLOBALS['CURRENT_DIR']) ? $GLOBALS['CURRENT_DIR'] : ROOT;
        $filePath = $currentDir . DIRECTORY_SEPARATOR . $file;
        echo MarkdownPreviewer::generatePreviewPage($filePath, $file);
        exit;
    }
}

/**
 * 获取文件类型图标
 * @param string $fileType 文件类型
 * @return string 图标
 */
function getFileTypeIcon($fileType) {
    $icons = [
        'php' => '🐘',
        'html' => '🌐',
        'css' => '🎨',
        'js' => '📜',
        'json' => '📋',
        'md' => '📝',
        'txt' => '📄',
        'pdf' => '📕',
        'doc' => '📘',
        'docx' => '📘',
        'xls' => '📗',
        'xlsx' => '📗',
        'ppt' => '📙',
        'pptx' => '📙',
        'zip' => '📦',
        'rar' => '📦',
        'tar' => '📦',
        'gz' => '📦',
        'png' => '🖼️',
        'jpg' => '🖼️',
        'jpeg' => '🖼️',
        'gif' => '🖼️',
        'svg' => '🖼️',
        'mp3' => '🎵',
        'mp4' => '🎬',
        'avi' => '🎬',
        'mov' => '🎬',
        'sql' => '🗃️',
        'xml' => '📰',
        'csv' => '📊',
        '无扩展名' => '📄'
    ];
    
    return isset($icons[$fileType]) ? $icons[$fileType] : '📄';
}

/**
 * 生成文件统计信息
 * @param array $files 文件列表
 * @param string $currentDir 当前目录路径（可选）
 * @return string 统计信息 HTML
 */
function generateFileStatistics($files, $currentDir = null) {
    $totalFiles = count($files) - 2; // 减去 . 和 ..
    
    // 统计目录和文件数量
    $dirCount = 0;
    $fileCount = 0;
    $fileTypes = [];

    // 使用当前目录或根目录
    $baseDir = $currentDir ?: ROOT;

    foreach ($files as $file) {
        if ($file === '.' || $file === '..') {
            continue;
        }
        
        $filePath = $baseDir . DIRECTORY_SEPARATOR . $file;
        
        if (is_dir($filePath)) {
            $dirCount++;
        } elseif (is_file($filePath)) {
            $fileCount++;
            $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
            if (empty($extension)) {
                $extension = '无扩展名';
            }
            if (!isset($fileTypes[$extension])) {
                $fileTypes[$extension] = 0;
            }
            $fileTypes[$extension]++;
        }
    }

    // 构建统计信息
    $html = "<p><strong>📊 统计信息:</strong><br>";
    $html .= "• 目录数量: {$dirCount} 个<br>";
    $html .= "• 文件数量: {$fileCount} 个<br>";
    $html .= "• 总计项目: {$totalFiles} 个<br><br>";

    if (!empty($fileTypes)) {
        $html .= "<strong>📁 文件类型统计:</strong><br>";
        // 按数量排序
        arsort($fileTypes);
        
        foreach ($fileTypes as $type => $count) {
            $icon = getFileTypeIcon($type);
            $html .= "• {$icon} {$type} 文件: {$count} 个<br>";
        }
    }
    
    $html .= "</p>";
    
    return $html;
}

/**
 * 生成文件列表 HTML
 * @param array $files 文件列表
 * @param string $currentDir 当前目录路径（可选）
 * @return string 文件列表 HTML
 */
function generateFileList($files, $currentDir = null) {
    $html = "<h3>📂 目录内容列表:</h3>";
    $html .= "<ul>";

    // 使用当前目录或根目录
    $baseDir = $currentDir ?: ROOT;

    foreach ($files as $file) {
        // 跳过当前目录和父目录
        if ($file === '.' || $file === '..') {
            continue;
        }
        
        // 构建完整文件路径
        $filePath = $baseDir . DIRECTORY_SEPARATOR . $file;
        
        // 检查是文件还是目录
        if (is_dir($filePath)) {
            // 如果是目录，显示文件夹图标
            $html .= "<li>📁 <a href=\"$file/\" title=\"进入目录: $file\">$file/</a></li>";
        } elseif (is_file($filePath)) {
            // 如果是文件，显示文件图标
            $fileSize = filesize($filePath);
            $fileType = pathinfo($file, PATHINFO_EXTENSION);
            
            // 特殊处理 Markdown 文件
            if (MarkdownPreviewer::isMarkdownFile($file)) {
                $html .= "<li>📋 <a href=\"?preview=md&file=$file\" title=\"Markdown 文件 - 点击预览, 大小: $fileSize 字节\">$file</a> <small style='color: #666;'>(预览)</small></li>";
            } else {
                $icon = getFileTypeIcon(strtolower($fileType));
                $html .= "<li>{$icon} <a href=\"$file\" title=\"文件类型: $fileType, 大小: $fileSize 字节\">$file</a></li>";
            }
        }
    }

    $html .= "</ul>";
    
    return $html;
}
?>